//
// Created by Zhangwj on 2023/9/27.
//

#include "PrintfStmtItemNode.h"

std::unique_ptr<PrintfStmtItemNode> PrintfStmtItemNode::PrintfStmtItemParser(Parser &parser) {
    //'printf''('FormatString{','Exp}')'';'
    std::unique_ptr<PrintfStmtItemNode> printfStmtItemNode = std::make_unique<PrintfStmtItemNode>();
    if (parser.getLexType(0) == LexType::PRINTFTK) {
        parser.next();
    }
    if (parser.getLexType(0) == LexType::LPARENT) {
        parser.next();
    }
    if (parser.getLexType(0) == LexType::STRCON) {
        printfStmtItemNode->FormatString = parser.getString(0);
        parser.next();
    }
    while (parser.getLexType(0) == LexType::COMMA) {
        parser.next();
        printfStmtItemNode->Exps.push_back(ExpNode::ExpParser(parser));
    }
    if (parser.getLexType(0) == LexType::RPARENT) {
        parser.next();
    }
    if (parser.getLexType(0) == LexType::SEMICN) {
        parser.next();
    }
    return printfStmtItemNode;
}
